/// <reference path="fourslash.ts" />

// @noLib: true
//// interface Foo {
////   _0: 0;
////   _1: 1;
////   _2: 2;
////   _3: 3;
////   _4: 4;
////   _5: 5;
////   _6: 6;
////   _7: 7;
////   _8: 8;
////   _9: 9;
////   _10: 10;
////   _11: 11;
////   _12: 12;
////   _13: 13;
////   _14: 14;
////   _15: 15;
////   _16: 16;
////   _17: 17;
////   _18: 18;
////   _19: 19;
////   _20: 20;
////   _21: 21;
////   _22: 22;
////   _23: 23;
////   _24: 24;
////   _25: 25;
////   _26: 26;
////   _27: 27;
////   _28: 28;
////   _29: 29;
////   _30: 30;
////   _31: 31;
////   _32: 32;
////   _33: 33;
////   _34: 34;
////   _35: 35;
////   _36: 36;
////   _37: 37;
////   _38: 38;
////   _39: 39;
////   _40: 40;
////   _41: 41;
////   _42: 42;
////   _43: 43;
////   _44: 44;
////   _45: 45;
////   _46: 46;
////   _47: 47;
////   _48: 48;
////   _49: 49;
////   _50: 50;
////   _51: 51;
////   _52: 52;
////   _53: 53;
////   _54: 54;
////   _55: 55;
////   _56: 56;
////   _57: 57;
////   _58: 58;
////   _59: 59;
////   _60: 60;
////   _61: 61;
////   _62: 62;
////   _63: 63;
////   _64: 64;
////   _65: 65;
////   _66: 66;
////   _67: 67;
////   _68: 68;
////   _69: 69;
////   _70: 70;
////   _71: 71;
////   _72: 72;
////   _73: 73;
////   _74: 74;
////   _75: 75;
////   _76: 76;
////   _77: 77;
////   _78: 78;
////   _79: 79;
////   _80: 80;
////   _81: 81;
////   _82: 82;
////   _83: 83;
////   _84: 84;
////   _85: 85;
////   _86: 86;
////   _87: 87;
////   _88: 88;
////   _89: 89;
////   _90: 90;
////   _91: 91;
////   _92: 92;
////   _93: 93;
////   _94: 94;
////   _95: 95;
////   _96: 96;
////   _97: 97;
////   _98: 98;
////   _99: 99;
////   _100: 100;
////   _101: 101;
////   _102: 102;
////   _103: 103;
////   _104: 104;
////   _105: 105;
////   _106: 106;
////   _107: 107;
////   _108: 108;
////   _109: 109;
////   _110: 110;
////   _111: 111;
////   _112: 112;
////   _113: 113;
////   _114: 114;
////   _115: 115;
////   _116: 116;
////   _117: 117;
////   _118: 118;
////   _119: 119;
////   _120: 120;
////   _121: 121;
////   _122: 122;
////   _123: 123;
////   _124: 124;
////   _125: 125;
////   _126: 126;
////   _127: 127;
////   _128: 128;
////   _129: 129;
////   _130: 130;
////   _131: 131;
////   _132: 132;
////   _133: 133;
////   _134: 134;
////   _135: 135;
////   _136: 136;
////   _137: 137;
////   _138: 138;
////   _139: 139;
////   _140: 140;
////   _141: 141;
////   _142: 142;
////   _143: 143;
////   _144: 144;
////   _145: 145;
////   _146: 146;
////   _147: 147;
////   _148: 148;
////   _149: 149;
////   _150: 150;
////   _151: 151;
////   _152: 152;
////   _153: 153;
////   _154: 154;
////   _155: 155;
////   _156: 156;
////   _157: 157;
////   _158: 158;
////   _159: 159;
////   _160: 160;
////   _161: 161;
////   _162: 162;
////   _163: 163;
////   _164: 164;
////   _165: 165;
////   _166: 166;
////   _167: 167;
////   _168: 168;
////   _169: 169;
////   _170: 170;
////   _171: 171;
////   _172: 172;
////   _173: 173;
////   _174: 174;
////   _175: 175;
////   _176: 176;
////   _177: 177;
////   _178: 178;
////   _179: 179;
////   _180: 180;
////   _181: 181;
////   _182: 182;
////   _183: 183;
////   _184: 184;
////   _185: 185;
////   _186: 186;
////   _187: 187;
////   _188: 188;
////   _189: 189;
////   _190: 190;
////   _191: 191;
////   _192: 192;
////   _193: 193;
////   _194: 194;
////   _195: 195;
////   _196: 196;
////   _197: 197;
////   _198: 198;
////   _199: 199;
////   _200: 200;
////   _201: 201;
////   _202: 202;
////   _203: 203;
////   _204: 204;
////   _205: 205;
////   _206: 206;
////   _207: 207;
////   _208: 208;
////   _209: 209;
////   _210: 210;
////   _211: 211;
////   _212: 212;
////   _213: 213;
////   _214: 214;
////   _215: 215;
////   _216: 216;
////   _217: 217;
////   _218: 218;
////   _219: 219;
////   _220: 220;
////   _221: 221;
////   _222: 222;
////   _223: 223;
////   _224: 224;
////   _225: 225;
////   _226: 226;
////   _227: 227;
////   _228: 228;
////   _229: 229;
////   _230: 230;
////   _231: 231;
////   _232: 232;
////   _233: 233;
////   _234: 234;
////   _235: 235;
////   _236: 236;
////   _237: 237;
////   _238: 238;
////   _239: 239;
////   _240: 240;
////   _241: 241;
////   _242: 242;
////   _243: 243;
////   _244: 244;
////   _245: 245;
////   _246: 246;
////   _247: 247;
////   _248: 248;
////   _249: 249;
////   _250: 250;
////   _251: 251;
////   _252: 252;
////   _253: 253;
////   _254: 254;
////   _255: 255;
////   _256: 256;
////   _257: 257;
////   _258: 258;
////   _259: 259;
////   _260: 260;
////   _261: 261;
////   _262: 262;
////   _263: 263;
////   _264: 264;
////   _265: 265;
////   _266: 266;
////   _267: 267;
////   _268: 268;
////   _269: 269;
////   _270: 270;
////   _271: 271;
////   _272: 272;
////   _273: 273;
////   _274: 274;
////   _275: 275;
////   _276: 276;
////   _277: 277;
////   _278: 278;
////   _279: 279;
////   _280: 280;
////   _281: 281;
////   _282: 282;
////   _283: 283;
////   _284: 284;
////   _285: 285;
////   _286: 286;
////   _287: 287;
////   _288: 288;
////   _289: 289;
////   _290: 290;
////   _291: 291;
////   _292: 292;
////   _293: 293;
////   _294: 294;
////   _295: 295;
////   _296: 296;
////   _297: 297;
////   _298: 298;
////   _299: 299;
////   _300: 300;
////   _301: 301;
////   _302: 302;
////   _303: 303;
////   _304: 304;
////   _305: 305;
////   _306: 306;
////   _307: 307;
////   _308: 308;
////   _309: 309;
////   _310: 310;
////   _311: 311;
////   _312: 312;
////   _313: 313;
////   _314: 314;
////   _315: 315;
////   _316: 316;
////   _317: 317;
////   _318: 318;
////   _319: 319;
////   _320: 320;
////   _321: 321;
////   _322: 322;
////   _323: 323;
////   _324: 324;
////   _325: 325;
////   _326: 326;
////   _327: 327;
////   _328: 328;
////   _329: 329;
////   _330: 330;
////   _331: 331;
////   _332: 332;
////   _333: 333;
////   _334: 334;
////   _335: 335;
////   _336: 336;
////   _337: 337;
////   _338: 338;
////   _339: 339;
////   _340: 340;
////   _341: 341;
////   _342: 342;
////   _343: 343;
////   _344: 344;
////   _345: 345;
////   _346: 346;
////   _347: 347;
////   _348: 348;
////   _349: 349;
////   _350: 350;
////   _351: 351;
////   _352: 352;
////   _353: 353;
////   _354: 354;
////   _355: 355;
////   _356: 356;
////   _357: 357;
////   _358: 358;
////   _359: 359;
////   _360: 360;
////   _361: 361;
////   _362: 362;
////   _363: 363;
////   _364: 364;
////   _365: 365;
////   _366: 366;
////   _367: 367;
////   _368: 368;
////   _369: 369;
////   _370: 370;
////   _371: 371;
////   _372: 372;
////   _373: 373;
////   _374: 374;
////   _375: 375;
////   _376: 376;
////   _377: 377;
////   _378: 378;
////   _379: 379;
////   _380: 380;
////   _381: 381;
////   _382: 382;
////   _383: 383;
////   _384: 384;
////   _385: 385;
////   _386: 386;
////   _387: 387;
////   _388: 388;
////   _389: 389;
////   _390: 390;
////   _391: 391;
////   _392: 392;
////   _393: 393;
////   _394: 394;
////   _395: 395;
////   _396: 396;
////   _397: 397;
////   _398: 398;
////   _399: 399;
////   _400: 400;
////   _401: 401;
////   _402: 402;
////   _403: 403;
////   _404: 404;
////   _405: 405;
////   _406: 406;
////   _407: 407;
////   _408: 408;
////   _409: 409;
////   _410: 410;
////   _411: 411;
////   _412: 412;
////   _413: 413;
////   _414: 414;
////   _415: 415;
////   _416: 416;
////   _417: 417;
////   _418: 418;
////   _419: 419;
////   _420: 420;
////   _421: 421;
////   _422: 422;
////   _423: 423;
////   _424: 424;
////   _425: 425;
////   _426: 426;
////   _427: 427;
////   _428: 428;
////   _429: 429;
////   _430: 430;
////   _431: 431;
////   _432: 432;
////   _433: 433;
////   _434: 434;
////   _435: 435;
////   _436: 436;
////   _437: 437;
////   _438: 438;
////   _439: 439;
////   _440: 440;
////   _441: 441;
////   _442: 442;
////   _443: 443;
////   _444: 444;
////   _445: 445;
////   _446: 446;
////   _447: 447;
////   _448: 448;
////   _449: 449;
////   _450: 450;
////   _451: 451;
////   _452: 452;
////   _453: 453;
////   _454: 454;
////   _455: 455;
////   _456: 456;
////   _457: 457;
////   _458: 458;
////   _459: 459;
////   _460: 460;
////   _461: 461;
////   _462: 462;
////   _463: 463;
////   _464: 464;
////   _465: 465;
////   _466: 466;
////   _467: 467;
////   _468: 468;
////   _469: 469;
////   _470: 470;
////   _471: 471;
////   _472: 472;
////   _473: 473;
////   _474: 474;
////   _475: 475;
////   _476: 476;
////   _477: 477;
////   _478: 478;
////   _479: 479;
////   _480: 480;
////   _481: 481;
////   _482: 482;
////   _483: 483;
////   _484: 484;
////   _485: 485;
////   _486: 486;
////   _487: 487;
////   _488: 488;
////   _489: 489;
////   _490: 490;
////   _491: 491;
////   _492: 492;
////   _493: 493;
////   _494: 494;
////   _495: 495;
////   _496: 496;
////   _497: 497;
////   _498: 498;
////   _499: 499;
//// }
//// type A/*1*/ = keyof Foo;
//// type Exclude<T, U> = T extends U ? never : T;
//// type Less/*2*/ = Exclude<A, "_0">;
//// function f<T extends A>(s: T, x: Exclude<A, T>, y: string) {}
//// f("_499", /*3*/);
//// type Decomposed/*4*/ = {[K in A]: Foo[K]}
//// type LongTuple/*5*/ = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17.18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70];
//// type DeeplyMapped/*6*/ = {[K in keyof Foo]: {[K2 in keyof Foo]: [K, K2, Foo[K], Foo[K2]]}}

goTo.marker("1");
verify.quickInfoIs(`type A = "_0" | "_1" | "_2" | "_3" | "_4" | "_5" | "_6" | "_7" | "_8" | "_9" | "_10" | "_11" | "_12" | "_13" | "_14" | "_15" | "_16" | "_17" | "_18" | "_19" | "_20" | "_21" | "_22" | "_23" | "_24" | ... 474 more ... | "_499"`);
goTo.marker("2");
verify.quickInfoIs(`type Less = "_1" | "_2" | "_3" | "_4" | "_5" | "_6" | "_7" | "_8" | "_9" | "_10" | "_11" | "_12" | "_13" | "_14" | "_15" | "_16" | "_17" | "_18" | "_19" | "_20" | "_21" | "_22" | "_23" | "_24" | "_25" | ... 473 more ... | "_499"`);
goTo.marker("3");
verify.signatureHelp({
    marker: "3",
    text: `f(s: "_499", x: "_0" | "_1" | "_2" | "_3" | "_4" | "_5" | "_6" | "_7" | "_8" | "_9" | "_10" | "_11" | "_12" | "_13" | "_14" | "_15" | "_16" | "_17" | "_18" | "_19" | "_20" | "_21" | "_22" | "_23" | "_24" | ... 473 more ... | "_498", y: string): void`
});
goTo.marker("4");
verify.quickInfoIs(`type Decomposed = {
    _0: 0;
    _1: 1;
    _2: 2;
    _3: 3;
    _4: 4;
    _5: 5;
    _6: 6;
    _7: 7;
    _8: 8;
    _9: 9;
    _10: 10;
    _11: 11;
    _12: 12;
    _13: 13;
    _14: 14;
    _15: 15;
    _16: 16;
    _17: 17;
    _18: 18;
    _19: 19;
    _20: 20;
    _21: 21;
    _22: 22;
    _23: 23;
    _24: 24;
    _25: 25;
    _26: 26;
    _27: 27;
    _28: 28;
    _29: 29;
    _30: 30;
    ... 468 more ...;
    _499: 499;
}`);
goTo.marker("5");
verify.quickInfoIs(`type LongTuple = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17.18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, ... 27 more ..., 70]`);
goTo.marker("6");
verify.quickInfoIs(`type DeeplyMapped = {
    _0: {
        _0: ["_0", "_0", 0, 0];
        _1: ["_0", "_1", 0, 1];
        _2: ["_0", "_2", 0, 2];
        _3: ["_0", "_3", 0, 3];
        _4: ["_0", "_4", 0, 4];
        _5: ["_0", "_5", 0, 5];
        _6: ["_0", "_6", 0, 6];
        _7: ["_0", "_7", 0, 7];
        ... 491 more ...;
        _499: [...];
    };
    ... 498 more ...;
    _499: {
        ...;
    };
}`);
